package jp.co.katagaki.crossword.create;

import jp.co.katagaki.crossword.puzzle.CrosswordPuzzle;
import jp.co.katagaki.util.Assertions;

/**
 * クロスワードを生成するクラス。
 *
 * @author naotake
 */
public class CrossordPuzzleCreater {

    /** クロスワードビルダー */
    private CrosswordBuilder builder;

    /**
     * 生成情報を基にクロスワードを生成する。<br />
     * 以下のルールに従ってクロスワードを生成する。
     * <ul>
     * <li>生成情報に パズル ID が指定されている場合、該当するファイル情報からクロスワードを生成</li>
     * <li>生成情報に パズル ID が指定されていない場合、パズルのサイズからクロスワードを生成</li>
     * </ul>
     *
     * @param config
     *            生成情報
     * @return クロスワード
     */
    public CrosswordPuzzle createPuzzle(PuzzleCreateConfig config) {
        Assertions.assertNotNull("生成情報", config);

        return builder.build(config);
    }

    /**
     * クロスワードの情報をスナップショットとしてファイルに登録する。
     *
     * @param puzzle
     *            スナップショットとして登録するクロスワード
     * @return 登録結果のパズル ID（スナップショットを復元する際に、このパズル ID を使用する）
     */
    public Long registerSnapshot(CrosswordPuzzle puzzle) {
        // TODO 未実装
        return 1L;
    }

    /**
     * クロスワードの情報を外部情報に出力する。
     *
     * @param puzzle
     *            出力するクロスワード情報
     */
    public void output(CrosswordPuzzle puzzle) {
        // TODO 未実装
    }
}
